/*
 * sysmo 服务器监控项脚本对象
 * Copyright (C) 2009  YuLicheng
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.sysmo.server.node.item;

import org.sysmo.communication.CommunicationInterface;

/**
 *
 * 脚本对象可用于存储任何类型的文件。包括二进制程序或文本文件。此对象一经创建后
 * 就不可更改，若要更改应创建新的对象。另外此对象也负责向客户端发送脚本。
 * <br />
 *
 * 脚本将使用指定的命令行来执行。命令行中使用${file}代替最终的脚本文件名。
 *
 * @author YuLicheng
 */
public class ItemScript {

    /**
     * 获得此脚本的文件内容。
     *
     * @return 脚本文件内容。
     */
    public byte[] getScript() {
        return null;
    }

    /**
     * 设置脚本数据。
     *
     * @param scriptData 脚本数据
     */
    public void setScript(byte[] scriptData) {

    }

    /**
     * 获得此脚本的命令行。
     *
     * @return 命令行。
     */
    public String getCommandLine() {
        return null;
    }
    
    /**
     * 设置执行脚本的命令行。
     *
     * @param commandLine 命令行。
     */
    public void setCommandLine(String commandLine) {
        
    }

    /**
     * 获取脚本文件的后缀名。
     *
     * @return 脚本文件后缀名。
     */
    public String getPostfix() {
        return null;
    }

    /**
     * 设置脚本文件后缀名。由于一些操作系统使用后缀名来决定文件是否能够执行，因此
     * 在将脚本文件传送到客户端时同时需要将其后缀名一并发送，以保证此文件能够按照
     * 设置的命令行执行。
     *
     * @param postfix
     */
    public void setPostfix(String postfix) {

    }

    /**
     * 从客户端获取指定监控项的脚本设置。通过设置needScript参数可以指定是否也要求
     * 客户端发送脚本文件数据。
     *
     * @param itemID 脚本所属监控项ID。
     * @param communicationInterface 通讯协议接口。
     * @param needScript 指定是否要求客户端同时发送脚本数据，若为false，则客户端
     * 只发送命令行和脚本文件后缀名，若为true，则还要发送脚本文件数据。
     */
    public void getFromClient(int itemID,
            CommunicationInterface communicationInterface, boolean needScript) {

    }

    /**
     * 将脚本或设置发送给客户端。通过设置sendScript参数可以指定是否也发送脚本文件。
     *
     * @param itemID 脚本所属监控项ID。
     * @param communicationInterface 通讯协议接口。
     * @param sendScript 指定是否一并发送脚本数据，若为false，则只发送命令行和脚
     * 本文件后缀名，若为true，则还要发送脚本文件数据。
     */
    public void sendToClient(int itemID,
            CommunicationInterface communicationInterface, boolean sendScript) {
        
    }

}
